package com.zenithmind.gateway.config;

import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import reactor.core.publisher.Mono;

import lombok.extern.slf4j.Slf4j;

/**
 * 网关基础配置类
 * 专门负责网关的基础设施配置（如限流器等）
 * 遵循单一职责原则：只负责基础设施配置
 */
@Slf4j
@Configuration
@EnableConfigurationProperties(GatewayRouteProperties.class)
public class GatewayBaseConfig {

    /**
     * 配置限流的键解析器，此解析器基于客户端的IP地址进行限流
     * 主要用于控制每个IP地址对服务的访问频率，防止某个IP的请求过多，影响服务稳定性
     *
     * @return KeyResolver接口的实现，用于解析限流的键值
     */
    @Bean
    public KeyResolver remoteAddrKeyResolver() {
        log.info("配置基于IP地址的限流键解析器");
        // 解析并返回客户端的IP地址作为限流的键
        return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getHostString());
    }
}
